package com.ruoyi.system.service.impl;

import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ReUtil;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.JsonUtils;
import com.ruoyi.common.core.utils.SecurityUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.system.domain.SysMsgTemplate;
import com.ruoyi.system.mapper.SysMsgTemplateMapper;
import com.ruoyi.system.service.ISysMsgTemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.regex.Pattern;

/**
 * 消息模板Service业务层处理
 *
 * @author Felix
 * @date 2022-04-14
 */
@Service
public class SysMsgTemplateServiceImpl implements ISysMsgTemplateService {
    /**
     * 正则表达式，匹配 {} 中的变量
     */
    private static final Pattern PATTERN_PARAMS = Pattern.compile("\\$\\{(.*?)}");

    @Autowired
    private SysMsgTemplateMapper sysMsgTemplateMapper;

    /**
     * 查询消息模板
     *
     * @param id 消息模板ID
     * @return 消息模板
     */
    @Override
    public SysMsgTemplate selectSysMsgTemplateById(String id) {
        SysMsgTemplate result = sysMsgTemplateMapper.selectSysMsgTemplateById(id);
        if(StringUtils.isNotEmpty(result.getParam())){
            result.setParamList(JsonUtils.convertOne2List(result.getParam()));
        }
        return result;
    }

    /**
     * 查询消息模板列表
     *
     * @param sysMsgTemplate 消息模板
     * @return 消息模板
     */
    @Override
    public List<SysMsgTemplate> selectSysMsgTemplateList(SysMsgTemplate sysMsgTemplate) {
        return sysMsgTemplateMapper.selectSysMsgTemplateList(sysMsgTemplate);
    }

    /**
     * 新增消息模板
     *
     * @param sysMsgTemplate 消息模板
     * @return 结果
     */
    @Override
    public int insertSysMsgTemplate(SysMsgTemplate sysMsgTemplate) {
        sysMsgTemplate.setId(IdUtil.getSnowflake(0, 0).nextIdStr());
        sysMsgTemplate.setCreateTime(DateUtils.getNowDate());
        sysMsgTemplate.setCreateBy(SecurityUtils.getUsername());
        sysMsgTemplate.setParam(parseTemplateContentParam(sysMsgTemplate.getContent()));
        return sysMsgTemplateMapper.insertSysMsgTemplate(sysMsgTemplate);
    }

    /**
     * 修改消息模板
     *
     * @param sysMsgTemplate 消息模板
     * @return 结果
     */
    @Override
    public int updateSysMsgTemplate(SysMsgTemplate sysMsgTemplate) {
        sysMsgTemplate.setUpdateTime(DateUtils.getNowDate());
        sysMsgTemplate.setUpdateBy(SecurityUtils.getUsername());
        if(StringUtils.isNotEmpty(sysMsgTemplate.getContent())){
            sysMsgTemplate.setParam(parseTemplateContentParam(sysMsgTemplate.getContent()));
        }
        return sysMsgTemplateMapper.updateSysMsgTemplate(sysMsgTemplate);
    }

    public String parseTemplateContentParam(String content) {
        List<String> params = ReUtil.findAllGroup1(PATTERN_PARAMS, content);
        return JsonUtils.covertList2One(params);
    }


    /**
     * 批量删除消息模板
     *
     * @param ids 需要删除的消息模板ID
     * @return 结果
     */
    @Override
    public int deleteSysMsgTemplateByIds(String[] ids) {
        return sysMsgTemplateMapper.deleteSysMsgTemplateByIds(ids);
    }

    /**
     * 删除消息模板信息
     *
     * @param id 消息模板ID
     * @return 结果
     */
    @Override
    public int deleteSysMsgTemplateById(String id) {
        return sysMsgTemplateMapper.deleteSysMsgTemplateById(id);
    }
}
